#include "head.h"

#ifdef SYSTEMV
int queue_id;
#else
mqd_t queue_id;
#endif

void no_space(int sig) {
	printf("Brak miejsca w kolejce na wiadomość\n");
#if defined POSIX || defined POSIX_SIGNAL
	if (mq_close(queue_id) == -1) {
		perror("mq_close");
	}
#endif
	exit(0);
}

void success(int sig) {
	printf("Zapisanie wiadomości w kolejce zakończyło się powodzeniem\n");
#if defined POSIX || defined POSIX_SIGNAL
	if (mq_close(queue_id) == -1) {
		perror("mq_close");
	}
#endif
	exit(0);
}


int main(int argc, char ** argv) {
	if (argc != 2) {
		printf("Niepoprawne wywołanie. Poprawne wywołanie: ./client.o <nick>\n");
		return -1;
	}
	if (strlen(argv[1]) > 32) {
		printf("Nick musi mieć długośc mniejszą niż 32\n");
		return -2;
	}
	struct message mess;
#ifdef SYSTEMV
	int server_key;
	if ((server_key = ftok(SERVER_FILE, SERVER)) == -1) {
		perror("ftok");
		return -3;
	}
	if ((queue_id = msgget(server_key, 0)) == -1) {
		perror("msgget");
		return -4;
	}
#else
	if ((queue_id = mq_open(SERVER_FILE, O_WRONLY)) == -1) {
		perror("mq_open");
		return -5;
	}
#endif
	if(signal(SIGUSR1, no_space) == SIG_ERR)
	{
		perror("signal");
		return -8;
	}
	
	if(signal(SIGUSR2, success) == SIG_ERR)
	{
		perror("signal");
		return -7;
	}
	strcpy(mess.nick, argv[1]);
	mess.pid = getpid();
#ifdef SYSTEMV
	mess.type = CLIENT;
#endif	
	srand(time(NULL));
	int size = rand()%MESS_LENGTH + 1;
	mess.msg[size-1] = '\0';
	int i;
	for (i = 0; i < size - 1; i++) {
		mess.msg[i] = 'a' + rand()%24;
	}
#ifdef SYSTEMV
	if (msgsnd(queue_id, &mess, sizeof(struct message), 0) == -1) {
		perror("msgsnd");
		return -9;
	}
#else
	if (mq_send(queue_id, (char *)&mess, sizeof(struct message), 0) == -1) {
		perror("mq_send");
		return -10;
	}
#endif
	pause();
	return 0;
}
